package com.cn.serverline.lineicp.productionLine.service;

import cn.hutool.core.lang.tree.Tree;
import com.cn.serverline.lineicp.productionLine.entity.ProductMix;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cn.serverline.lineicp.productionLine.param.*;

import java.util.List;

/**
 * 产品结构表 服务类
 *
 * @author Gmr
 * @since 2024-07-30
 */
public interface IProductMixService extends IService<ProductMix> {

    /**
     * 获取产品结构树
     *
     * @author Gmr
     * @since 2024/7/30
     * @param productMixTreeParam 产品结构树参数
     * @return List<Tree<Long>> 产品结构树
     */
    public List<Tree<Long>> tree(ProductMixTreeParam productMixTreeParam);

    /**
     * 获取所有型号
     *
     * @author Gmr
     * @since 2024/7/30
     * @return List<ProductMix> 型号列表
     */
    public List<ProductMix> listModel();

    /**
     * 添加产品类型或型号或工艺方案
     *
     * @author Gmr
     * @since 2024/7/30
     * @param productsAddParam 产品类型或型号或工艺方案添加参数
     */
    public void addProducts(ProductsAddParam productsAddParam);

    /**
     * 添加工艺方案
     *
     * @author Gmr
     * @since 2024/7/30
     * @param processSchemeAddParam 工艺方案添加参数
     */
    public void addProcessScheme(ProcessSchemeAddParam processSchemeAddParam);

    /**
     * 获取详细信息
     *
     * @author Gmr
     * @since 2024/7/30
     * @param id ID
     * @return ProductMix 产品结构详细信息
     */
    public ProductMix detail(ProductMixIdParam id);

    /**
     * 修改工艺方案
     *
     * @author Gmr
     * @since 2024/7/30
     * @param processSchemeEditParam 工艺方案修改参数
     */
    public void editProcessScheme(ProcessSchemeEditParam processSchemeEditParam);

    /**
     * 修改产品类型或型号
     *
     * @author Gmr
     * @since 2024/7/30
     * @param productsEditParam 产品类型和型号修改参数
     */
    public void editProducts(ProductsEditParam productsEditParam);

    /**
     * 删除
     *
     * @author Gmr
     * @since 2024/7/30
     * @param id ID
     */
    public void del(ProductMixIdParam id);

}
